package com.molichuxing.services.infrastructure.service;

import com.molichuxing.framework.dto.Paged;
import com.molichuxing.framework.exception.BizException;
import com.molichuxing.framework.service.RootService;
import com.molichuxing.services.infrastructure.dto.response.response.AccountCreateDto;
import com.molichuxing.services.infrastructure.dto.response.response.AccountDto;
import com.molichuxing.services.infrastructure.dto.response.response.AccountModifyDto;
import com.molichuxing.services.property.SystemTypeEnum;

import java.util.List;
import java.util.Map;

/**
 * 账户基础服务
 *
 * @author zoumingyu
 * @date 2019年9月9日
 */
public interface AccountService extends RootService {

    /**
     * 获取有效的账户信息
     *
     * @param account      用户账户
     * @param password     登录密码
     * @param systemType   系统类型
     * @return
     *
     */
    AccountDto getEffectiveAccount(String account, String password, SystemTypeEnum systemType)
            throws BizException;

    /**
     * 获取有效的账户信息
     *
     * @param account    用户账户
     * @param password   登录密码
     * @param systemType 系统类型
     * @return
     */
    AccountDto getEffectiveAccountByIov(String account, String password, SystemTypeEnum systemType)
            throws BizException;

    Paged<AccountDto> getAccountList(Map<String, Object> param, int pageNum, int pageSize);

    int getAccountCount(Map<String, Object> param);

    /**
     * 保存用户与关联角色
     *
     * @param dto
     * @return
     */
    int createAccount(AccountCreateDto dto);

    int modifyAccount(AccountModifyDto dto);

    int modifyAccount(AccountDto dto);

    AccountDto getById(int id);

    int modifyPassword(String password, int id);

    /**
     * 修改密码，车联网用
     *
     * @param password
     * @param account
     * @return
     */
    int modifyPasswordByIov(String password, String account);

    AccountDto getIovAccount();

    /**
     * 修改用户，车联网用
     *
     * @param dto
     * @return
     */
    int modifyAccountByIov(AccountDto dto);

    List<AccountDto> getAccountByParam(Map<String, Object> param);

    AccountDto getAccount(String account, int systemType);


    /**
     * 设置用户为禁用状态
     * @param ids
     * @return
     */
    int modifyAccountToDisable(List<Integer> ids);

    /**
     * 设置用户为启用状态
     * @param ids
     * @return
     */
    int modifyAccountStatusToOpen(List<Integer> ids);
}
